#pragma onece
#include <vector>
#include <string>
#include <opencv2/opencv.hpp>
#include <onnxruntime_cxx_api.h>
// #include <onnxruntime/core/providers/cuda/cuda_execution_provider.h>

using namespace std;
using namespace cv;

class LightGlue{
public:
    LightGlue(std::string env_name, const std::string& lg_onnx_path, cv::Size img1_size, cv::Size img2_size, int num_threads=1);
    std::vector<cv::DMatch> L_Match(const std::vector<cv::KeyPoint>key_points1, \
                                    const std::vector<cv::KeyPoint>key_points2, \
                                    const cv::Mat& descriptors1, \
                                    const cv::Mat& descriptors2);
private:
    std::shared_ptr<Ort::Session> lg_session_ = nullptr;
    std::string env_name_ = "LightGlue";
    cv::Size img1_size_, img2_size_;
    int num_threads_ = 1;
};
